Custom Exception Handling Strategies গাইড ও নোট

Java Technologies - জ্যাকসন অ্যানোটেশন (Jackson Annotations) - Exception Handling in Jackson
226

Jackson JSON প্রক্রিয়াকরণের সময় কিছু ক্ষেত্রে Exception ঘটতে পারে, যেমন invalid data format, missing required fields, বা unsupported types। এই ধরনের exceptions হ্যান্ডেল করার জন্য আপনি Jackson এর Custom Exception Handling Strategies ব্যবহার করতে পারেন। Jackson এ Custom Exception Handling করতে Jackson-এর কিছু কাস্টম DeserializationException এবং SerializationException হ্যান্ডলিং কৌশল রয়েছে, যা নির্দিষ্ট ভুলগুলির জন্য কাস্টম এক্সপ্লানেশন প্রদান করে।

Jackson Exception Handling Overview

Jackson সাধারণত JSON Serialization এবং Deserialization এর সময় কিছু নির্দিষ্ট exceptions ছুঁড়ে দেয়, যেগুলি ডিফল্টভাবে JsonProcessingException এ ক্যাচ করা হয়। তবে, আপনি এই exceptions কে কাস্টমাইজ করতে পারেন, যাতে আপনার অ্যাপ্লিকেশন আরও পরিস্কারভাবে এবং ইউজার-ফ্রেন্ডলি মেসেজ প্রদান করতে পারে।


Common Jackson Exceptions

  1. JsonMappingException:
    • যখন JSON ডেটা Java অবজেক্টের সাথে সঠিকভাবে ম্যাপ হতে পারে না (যেমন, অবৈধ ডেটা টাইপ বা মিসিং ফিল্ড)।
  2. JsonParseException:
    • যখন JSON পার্স করার সময় সিনট্যাক্স ভুল থাকে (যেমন, অবৈধ JSON ফরম্যাট)।
  3. InvalidFormatException:
    • যখন JSON ডেটার ফরম্যাট Java অবজেক্টের জন্য উপযুক্ত নয় (যেমন, টাইপ কাস্টিং সমস্যা)।
  4. JsonProcessingException:
    • একটি অভ্যন্তরীণ superclass যা সাধারণভাবে Jackson এ JSON পার্সিং এবং প্রক্রিয়াকরণের সময় অন্য যেকোনো exception ধরে।

Custom Exception Handling Strategies

1. Custom Deserialization Exception Handling

কাস্টম Deserialization exception হ্যান্ডলিং এর জন্য, আপনি @JsonDeserialize অ্যানোটেশন ব্যবহার করতে পারেন এবং Custom Deserializer তৈরি করে বিশেষভাবে invalid data অথবা missing required fields এর জন্য কাস্টম exception বা error মেসেজ তৈরি করতে পারেন।

Custom Deserializer উদাহরণ:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.exc.InvalidFormatException;

import java.io.IOException;

public class CustomDateDeserializer extends JsonDeserializer<String> {

    @Override
    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String date = p.getText();
        try {
            // Custom logic to parse the date
            if (date.length() != 10) { // Invalid date format
                throw new InvalidFormatException(p, "Invalid date format, expected YYYY-MM-DD", date, String.class);
            }
            return date;
        } catch (Exception e) {
            throw new InvalidFormatException(p, "Invalid date format", date, String.class);
        }
    }
}
Person ক্লাসে Custom Deserializer প্রয়োগ করা:
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

public class Person {
    private String name;

    @JsonDeserialize(using = CustomDateDeserializer.class)
    private String birthDate;

    // Constructors, Getters, Setters
}
Error Handling Example:
import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomDeserializerExample {
    public static void main(String[] args) {
        String json = "{\"name\":\"Rahim\",\"birthDate\":\"12-2020-01\"}";  // Invalid date format

        try {
            ObjectMapper mapper = new ObjectMapper();
            Person person = mapper.readValue(json, Person.class);
            System.out.println(person.getName());
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}
Output:
Error: Invalid date format, expected YYYY-MM-DD

এই উদাহরণে, যখন invalid date format পাওয়া যায়, তখন InvalidFormatException Exception সহ কাস্টম error মেসেজ পাঠানো হয়।


2. Custom Serialization Exception Handling

Serialization এর সময় যখন কোনো অবজেক্ট JSON এ রূপান্তর করার সময় সমস্যা হয় (যেমন, unsupported type বা invalid field), তখন Custom Serializer ব্যবহার করে কাস্টম exception হ্যান্ডলিং করা যায়।

Custom Serializer উদাহরণ:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.exc.InvalidFormatException;

import java.io.IOException;

public class CustomPriceSerializer extends JsonSerializer<Double> {

    @Override
    public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        try {
            if (value < 0) {
                throw new InvalidFormatException(gen, "Price cannot be negative", value, Double.class);
            }
            gen.writeNumber(value);
        } catch (Exception e) {
            throw new InvalidFormatException(gen, "Invalid price format", value, Double.class);
        }
    }
}
Product ক্লাসে Custom Serializer প্রয়োগ করা:
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

public class Product {
    private String name;

    @JsonSerialize(using = CustomPriceSerializer.class)
    private double price;

    // Constructors, Getters, Setters
}
Error Handling Example:
import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomSerializerExample {
    public static void main(String[] args) {
        Product product = new Product("Laptop", -999.99);  // Invalid price

        try {
            ObjectMapper objectMapper = new ObjectMapper();
            String json = objectMapper.writeValueAsString(product);
            System.out.println(json);
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}
Output:
Error: Invalid price format

এখানে, যদি পণ্যের মূল্য নেতিবাচক (negative) হয়, তবে InvalidFormatException Exception সহ একটি কাস্টম error মেসেজ পাঠানো হয়েছে।


3. Global Exception Handling Strategy in Spring Boot (if using Spring)

Spring Boot-এ Jackson এর কাস্টম exception হ্যান্ডলিংয়ের জন্য একটি গ্লোবাল exception handler ব্যবহার করা যেতে পারে। এখানে Spring Boot এর @ControllerAdvice ব্যবহার করে কাস্টম exception হ্যান্ডলিং করা হয়।

Global Exception Handler Example:
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleAllExceptions(Exception ex) {
        return new ResponseEntity<>("Custom Error: " + ex.getMessage(), HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(InvalidFormatException.class)
    public ResponseEntity<String> handleInvalidFormatException(InvalidFormatException ex) {
        return new ResponseEntity<>("Custom Error: Invalid format - " + ex.getMessage(), HttpStatus.BAD_REQUEST);
    }
}
Controller Example:
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;

@RestController
public class ProductController {

    @GetMapping("/product")
    public Product getProduct() {
        return new Product("Laptop", -500); // Invalid price will trigger exception
    }
}

Summary of Custom Exception Handling Strategies

Exception TypeUse CaseSolution Approach
InvalidFormatExceptionInvalid date format, number format issuesUse JsonDeserializer or JsonSerializer with custom logic.
JsonMappingExceptionObject field mapping issues, mismatched typesCustom Exception in Deserializer/Serializer
JsonParseExceptionSyntax error in JSON data (unexpected tokens, illegal characters)Handle with JsonParseException and throw customized message
Custom Exception HandlingValidation issues like negative price, missing required fieldImplement @JsonSerialize, @JsonDeserialize, or use global handler in Spring Boot

  1. Custom Exception Handling Jackson এর মাধ্যমে ডেটা প্রক্রিয়া করার সময় সঠিক error মেসেজ তৈরি করতে সহায়তা করে।
  2. Deserialization এবং Serialization এ কাস্টম Exception হ্যান্ডলিং নিশ্চিত করে যে ডেটা সঠিকভাবে প্রক্রিয়া হবে এবং ইউজার ফ্রেন্ডলি মেসেজ দেওয়া হবে।
  3. Jackson exception handling কাস্টমাইজেশন আপনাকে ডেটা ভ্যালিডেশন এবং পার্সিং-এর ক্ষেত্রে অধিক নিয়ন্ত্রণ প্রদান করে।
Content added || updated By
Promotion

Are you sure to start over?

Loading...